]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
screenshot: Still remove select/pick actor if grab promise was rejected
authorSebastian Keller <skeller@gnome.org>
Wed, 27 Jan 2021 22:27:31 +0000 (23:27 +0100)
committerMarge Bot <marge-bot@gnome.org>
Thu, 28 Jan 2021 02:49:13 +0000 (02:49 +0000)
If the grab promise is rejected due to for example on X another app
already having the grab, an error is thrown and the code that would
revert the cursor and hide the actor is not run. This actor then
prevents all mouse interactions with the shell and the windows beneath
it.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2869

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1600>

js/ui/screenshot.js

index de5d3c0630ecce5075d478e9b2fab926f32602cb..787e60f9af964104493940b021ebf035ecd945a5 100644 (file)
@@ -322,14 +322,16 @@ class SelectArea extends St.Widget {
         Main.uiGroup.set_child_above_sibling(this, null);
         this.show();
 
-        await this._grabHelper.grabAsync({ actor: this });
-
-        global.display.set_cursor(Meta.Cursor.DEFAULT);
+        try {
+            await this._grabHelper.grabAsync({ actor: this });
+        } finally {
+            global.display.set_cursor(Meta.Cursor.DEFAULT);
 
-        GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
-            this.destroy();
-            return GLib.SOURCE_REMOVE;
-        });
+            GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
+                this.destroy();
+                return GLib.SOURCE_REMOVE;
+            });
+        }
 
         return this._result;
     }
@@ -561,15 +563,17 @@ class PickPixel extends St.Widget {
 
         this._pickColor(...global.get_pointer());
 
-        await this._grabHelper.grabAsync({ actor: this });
-
-        global.display.set_cursor(Meta.Cursor.DEFAULT);
-        this._previewCursor.destroy();
+        try {
+            await this._grabHelper.grabAsync({ actor: this });
+        } finally {
+            global.display.set_cursor(Meta.Cursor.DEFAULT);
+            this._previewCursor.destroy();
 
-        GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
-            this.destroy();
-            return GLib.SOURCE_REMOVE;
-        });
+            GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
+                this.destroy();
+                return GLib.SOURCE_REMOVE;
+            });
+        }
 
         return this._result;
     }